﻿namespace LanguageExt;

public class UnitsOfMeasure
{
    /// <summary>
    /// Millimetre
    /// </summary>
    /// <example>
    ///     Length x = 10*mm;
    /// </example>
    public static readonly Length mm = 1.Millimetres();

    /// <summary>
    /// Millimetre
    /// </summary>
    /// <example>
    ///     Length x = 1*millimetre;
    /// </example>
    public static readonly Length millimetre = 1.Millimetres();

    /// <summary>
    /// Millimetre
    /// </summary>
    /// <example>
    ///     Length x = 10*millimetres;
    /// </example>
    public static readonly Length millimetres = 1.Millimetres();

    /// <summary>
    /// Millimeter
    /// </summary>
    /// <example>
    ///     Length x = 1*millimeter;
    /// </example>
    public static readonly Length millimeter = 1.Millimetres();

    /// <summary>
    /// Millimeters
    /// </summary>
    /// <example>
    ///     Length x = 10*millimeters;
    /// </example>
    public static readonly Length millimeters = 1.Millimetres();

    /// <summary>
    /// Centimetre
    /// </summary>
    /// <example>
    ///     Length x = 100*cm;
    /// </example>
    public static readonly Length cm = 1.Centimetres();

    /// <summary>
    /// Centimetre
    /// </summary>
    /// <example>
    ///     Length x = 1*centimetre;
    /// </example>
    public static readonly Length centimetre = 1.Centimetres();

    /// <summary>
    /// Centimetres
    /// </summary>
    /// <example>
    ///     Length x = 100*centimetres
    /// </example>
    public static readonly Length centimetres = 1.Centimetres();

    /// <summary>
    /// Centimeter
    /// </summary>
    /// <example>
    ///     Length x = 1*centimeter;
    /// </example>
    public static readonly Length centimeter = 1.Centimetres();

    /// <summary>
    /// Centimeters
    /// </summary>
    /// <example>
    ///     Length x = 100*centimeters;
    /// </example>
    public static readonly Length centimeters = 1.Centimetres();

    /// <summary>
    /// Metre
    /// </summary>
    /// <example>
    ///     Length x = 10*m;
    /// </example>
    public static readonly Length m = 1.Metres();

    /// <summary>
    /// Metre
    /// </summary>
    /// <example>
    ///     Length x = 1*metre;
    /// </example>
    public static readonly Length metre = 1.Metres();

    /// <summary>
    /// Metres
    /// </summary>
    /// <example>
    ///     Length x = 10*metres;
    /// </example>
    public static readonly Length metres = 1.Metres();

    /// <summary>
    /// Meter
    /// </summary>
    /// <example>
    ///     Length x = 1*meter;
    /// </example>
    public static readonly Length meter = 1.Metres();

    /// <summary>
    /// Meters
    /// </summary>
    /// <example>
    ///     Length x = 10*meters;
    /// </example>
    public static readonly Length meters = 1.Metres();

    /// <summary>
    /// Kilometre
    /// </summary>
    /// <example>
    ///     Length x = 7*km;
    /// </example>
    public static readonly Length km = 1.Kilometres();

    /// <summary>
    /// Kilometre
    /// </summary>
    /// <example>
    ///     Length x = 1*kilometre;
    /// </example>
    public static readonly Length kilometre = 1.Kilometres();

    /// <summary>
    /// Kilometres
    /// </summary>
    /// <example>
    ///     Length x = 7*kilometres;
    /// </example>
    public static readonly Length kilometres = 1.Kilometres();

    /// <summary>
    /// Kilometer
    /// </summary>
    /// <example>
    ///     Length x = 1*kilometer;
    /// </example>
    public static readonly Length kilometer = 1.Kilometres();

    /// <summary>
    /// Kilometers
    /// </summary>
    /// <example>
    ///     Length x = 7*kilometers;
    /// </example>
    public static readonly Length kilometers = 1.Kilometres();
    /// <summary>
    /// Inch
    /// </summary>
    /// <example>
    ///     Length x = 7*inch;
    /// </example>
    public static readonly Length inch = 1.Inches();

    /// <summary>
    /// Inch
    /// </summary>
    /// <example>
    ///     Length x = 7*inches;
    /// </example>
    public static readonly Length inches = 1.Inches();

    /// <summary>
    /// Feet
    /// </summary>
    /// <example>
    ///     Length x = 7*ft;
    /// </example>
    public static readonly Length ft = 1.Feet();

    /// <summary>
    /// Feet
    /// </summary>
    /// <example>
    ///     Length x = 7*foot;
    /// </example>
    public static readonly Length foot = 1.Feet();

    /// <summary>
    /// Feet
    /// </summary>
    /// <example>
    ///     Length x = 7*feet;
    /// </example>
    public static readonly Length feet = 1.Feet();

    /// <summary>
    /// Yard
    /// </summary>
    /// <example>
    ///     Length x = 7*yd;
    /// </example>
    public static readonly Length yd = 1.Yards();

    /// <summary>
    /// Yard
    /// </summary>
    /// <example>
    ///     Length x = 7*yard;
    /// </example>
    public static readonly Length yard = 1.Yards();

    /// <summary>
    /// Yard
    /// </summary>
    /// <example>
    ///     Length x = 7*yards;
    /// </example>
    public static readonly Length yards = 1.Yards();

    /// <summary>
    /// Mile
    /// </summary>
    /// <example>
    ///     Length x = 7*mile;
    /// </example>
    public static readonly Length mile = 1.Miles();

    /// <summary>
    /// Mile
    /// </summary>
    /// <example>
    ///     Length x = 7*miles;
    /// </example>
    public static readonly Length miles = 1.Miles();

    /// <summary>
    /// NauticalMile
    /// </summary>
    /// <example>
    ///     Length x = 7*nauticalMile;
    /// </example>
    public static readonly Length nauticalMile = 1.NauticalMiles();

    /// <summary>
    /// Millimetre squared
    /// </summary>
    /// <example>
    ///     Area x = 10*mm2;
    /// </example>
    public static readonly Area mm2 = 1.SqMillimetres();

    /// <summary>
    /// Millimetre squared
    /// </summary>
    /// <example>
    ///     Area x = 1*millimetre2;
    /// </example>
    public static readonly Area millimetre2 = 1.SqMillimetres();

    /// <summary>
    /// Millimeter squared
    /// </summary>
    /// <example>
    ///     Area x = 10*millimeter2;
    /// </example>
    public static readonly Area millimeter2 = 1.SqMillimetres();

    /// <summary>
    /// Centimetre squared
    /// </summary>
    /// <example>
    ///     Area x = 100*cm2;
    /// </example>
    public static readonly Area cm2 = 1.SqCentimetres();

    /// <summary>
    /// Centimetre squared
    /// </summary>
    /// <example>
    ///     Area x = 100*centimetre2;
    /// </example>
    public static readonly Area centimetre2 = 1.SqCentimetres();

    /// <summary>
    /// Centimeter squared
    /// </summary>
    /// <example>
    ///     Area x = 100*centimeter2;
    /// </example>
    public static readonly Area centimeter2 = 1.SqCentimetres();

    /// <summary>
    /// Metre squared
    /// </summary>
    /// <example>
    ///     Area x = 10*m2;
    /// </example>
    public static readonly Area m2 = 1.SqMetres();

    /// <summary>
    /// Metre squared
    /// </summary>
    /// <example>
    ///     Area x = 10*metre2;
    /// </example>
    public static readonly Area metre2 = 1.SqMetres();

    /// <summary>
    /// Meter squared
    /// </summary>
    /// <example>
    ///     Area x = 10*meter2;
    /// </example>
    public static readonly Area meter2 = 1.SqMetres();

    /// <summary>
    /// Kilometre squared
    /// </summary>
    /// <example>
    ///     Area x = 7*km2;
    /// </example>
    public static readonly Area km2 = 1.SqKilometres();

    /// <summary>
    /// Kilometre squared
    /// </summary>
    /// <example>
    ///     Area x = 7*kilometre2;
    /// </example>
    public static readonly Area kilometre2 = 1.SqKilometres();

    /// <summary>
    /// Kilometer squared
    /// </summary>
    /// <example>
    ///     Area x = 7*kilometer2;
    /// </example>
    public static readonly Area kilometer2 = 1.SqKilometres();

    /// <summary>
    /// Second
    /// </summary>
    /// <example>
    ///     Time x = 7*s;
    /// </example>
    public static readonly Time s = 1.Seconds();

    /// <summary>
    /// Second
    /// </summary>
    /// <example>
    ///     Time x = 7*sec;
    /// </example>
    public static readonly Time sec = 1.Seconds();

    /// <summary>
    /// Second
    /// </summary>
    /// <example>
    ///     Time x = 7*second;
    /// </example>
    public static readonly Time second = 1.Seconds();

    /// <summary>
    /// Second
    /// </summary>
    /// <example>
    ///     Time x = 7*seconds;
    /// </example>
    public static readonly Time seconds = 1.Seconds();

    /// <summary>
    /// Minute
    /// </summary>
    /// <example>
    ///     Time x = 7*min;
    /// </example>
    public static readonly Time min = 1.Minutes();

    /// <summary>
    /// Minute
    /// </summary>
    /// <example>
    ///     Time x = 7*mins;
    /// </example>
    public static readonly Time mins = 1.Minutes();

    /// <summary>
    /// Minute
    /// </summary>
    /// <example>
    ///     Time x = 7*minute;
    /// </example>
    public static readonly Time minute = 1.Minutes();

    /// <summary>
    /// Minute
    /// </summary>
    /// <example>
    ///     Time x = 7*minutes;
    /// </example>
    public static readonly Time minutes = 1.Minutes();

    /// <summary>
    /// Hour
    /// </summary>
    /// <example>
    ///     Time x = 7*hr;
    /// </example>
    public static readonly Time hr = 1.Hours();

    /// <summary>
    /// Hour
    /// </summary>
    /// <example>
    ///     Time x = 7*hrs;
    /// </example>
    public static readonly Time hrs = 1.Hours();

    /// <summary>
    /// Hour
    /// </summary>
    /// <example>
    ///     Time x = 7*hour;
    /// </example>
    public static readonly Time hour = 1.Hours();

    /// <summary>
    /// Hour
    /// </summary>
    /// <example>
    ///     Time x = 7*hours;
    /// </example>
    public static readonly Time hours = 1.Hours();

    /// <summary>
    /// Day
    /// </summary>
    /// <example>
    ///     Time x = 7*day;
    /// </example>
    public static readonly Time day = 1.Days();

    /// <summary>
    /// Day
    /// </summary>
    /// <example>
    ///     Time x = 7*days;
    /// </example>
    public static readonly Time days = 1.Days();

    /// <summary>
    /// Millisecond
    /// </summary>
    /// <example>
    ///     Time x = 7*ms;
    /// </example>
    public static readonly Time ms = 1.Milliseconds();

    /// <summary>
    /// Millisecond
    /// </summary>
    /// <example>
    ///     Time x = 7*millisecond;
    /// </example>
    public static readonly Time millisecond = 1.Milliseconds();

    /// <summary>
    /// Millisecond
    /// </summary>
    /// <example>
    ///     Time x = 7*milliseconds;
    /// </example>
    public static readonly Time milliseconds = 1.Milliseconds();

    /// <summary>
    /// Miles per hour
    /// </summary>
    public static readonly Velocity mph = miles /hour;

    /// <summary>
    /// Kilometres per hour
    /// </summary>
    public static readonly Velocity kph = km /hour;

    /// <summary>
    /// Metres per-second squared
    /// </summary>
    public static readonly Accel ms2 = m /s /s;

    /// <summary>
    /// Degrees Celsius
    /// </summary>
    public static readonly Temperature degC = new (Temperature.UnitType.C, 1);

    /// <summary>
    /// Degrees Fahrenheit
    /// </summary>
    public static readonly Temperature degF = new (Temperature.UnitType.F, 1);

    /// <summary>
    /// kelvin
    /// </summary>
    public static readonly Temperature K = new (Temperature.UnitType.K, 1);

    /// <summary>
    /// Gram
    /// </summary>
    /// <example>
    ///    Mass x = 10*g;
    /// </example>
    public static readonly Mass g = 1.Grams();

    /// <summary>
    /// Gram
    /// </summary>
    /// <example>
    ///    Mass x = 10*gram;
    /// </example>
    public static readonly Mass gram = 1.Grams();

    /// <summary>
    /// Kilogram
    /// </summary>
    /// <example>
    ///    Mass x = 10*kg;
    /// </example>
    public static readonly Mass kg = 1.Kilograms();

    /// <summary>
    /// Kilogram
    /// </summary>
    /// <example>
    ///    Mass x = 10*kilogram;
    /// </example>
    public static readonly Mass kilogram = 1.Kilograms();

    /// <summary>
    /// Tonne
    /// </summary>
    /// <example>
    ///    Mass x = 10*tonne;
    /// </example>
    public static readonly Mass tonne = 1.Tonnes();

    /// <summary>
    /// Ounce
    /// </summary>
    /// <example>
    ///    Mass x = 10*oz;
    /// </example>
    public static readonly Mass oz = 1.Ounces();

    /// <summary>
    /// Ounce
    /// </summary>
    /// <example>
    ///    Mass x = 10*ounce;
    /// </example>
    public static readonly Mass ounce = 1.Ounces();

    /// <summary>
    /// Pound
    /// </summary>
    /// <example>
    ///    Mass x = 10*lb;
    /// </example>
    public static readonly Mass lb = 1.Pounds();

    /// <summary>
    /// Pound
    /// </summary>
    /// <example>
    ///    Mass x = 10*pound;
    /// </example>
    public static readonly Mass pound = 1.Pounds();

    /// <summary>
    /// Stone
    /// </summary>
    /// <example>
    ///    Mass x = 10*st;
    /// </example>
    public static readonly Mass st = 1.Stones();

    /// <summary>
    /// Stone
    /// </summary>
    /// <example>
    ///    Mass x = 10*stone;
    /// </example>
    public static readonly Mass stone = 1.Stones();

    /// <summary>
    /// ImperialTons
    /// </summary>
    /// <example>
    ///    Mass x = 10*ton;
    /// </example>
    public static readonly Mass ton = 1.ImperialTons();

    /// <summary>
    /// ShortTon
    /// </summary>
    /// <example>
    ///    Mass x = 10*shortTon;
    /// </example>
    public static readonly Mass shortTon = 1.ShortTon();
}
